/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Core;

import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.javaocr.gui.GUIController;
import net.sourceforge.javaocr.gui.meanSquareOCR.TrainingImageSpec;
import net.sourceforge.javaocr.ocrPlugins.mseOCR.CharacterRange;
import net.sourceforge.javaocr.ocrPlugins.mseOCR.OCRScanner;
import net.sourceforge.javaocr.ocrPlugins.mseOCR.TrainingImage;
/*Clase que invoca el OCR e interpreta la imagen de entrada*/

public class OCR {

    private BufferedImage ecuacion;
    private static String imagePath = ".\\"+"\\src\\Imagenes\\";
    private List<TrainingImageSpec> images = new ArrayList<TrainingImageSpec>(0);
    private TrainingImageSpec tis = null;
    private OCRScanner ocrs = new OCRScanner();
    private GUIController gc = new GUIController();
    private Pattern p;
    private Matcher m;

    //Carga la imagen e invoca el metodo de aprendizaje de caracteres.
    public OCR(BufferedImage entrada) {
        this.ecuacion = entrada;
        aprenderCaracteres();
    }

    //Se expecifica la ubicacion de la imagen donde se encuentran los caracteres a aprender
    //Y lo agregas a una lista.
    private void aprenderCaracteres() {
        tis = new TrainingImageSpec();
        tis.setFileLocation(imagePath + "hpljPica1.jpg");
        tis.setCharRange(new CharacterRange(' ', '}'));
        images.add(tis);
        /*tis = new TrainingImageSpec();
        tis.setFileLocation(imagePath + "subindices.png");
        tis.setCharRange(new CharacterRange('\u2080', '\u208E'));
        images.add(tis);*/
        tis = new TrainingImageSpec();
        tis.setFileLocation(imagePath + "integral.png");
        tis.setCharRange(new CharacterRange('\u0283', '\u0283'));
        images.add(tis);
        
        /*tis = new TrainingImageSpec();
        tis.setFileLocation(imagePath + "superindices.png");
        tis.setCharRange(new CharacterRange('\u2074', '\u207E'));
        images.add(tis);*/
    }

    /*En esta seccion se carga la lista y se va comparando cada letra del resultado
    de la parte se segmentacion que corresponde al algoritmo del OCR.*/
    public String getText() {
        String texto = null;
        String salida = "";
        try {
            HashMap<Character, ArrayList<TrainingImage>> trainingImages = gc.getTrainingImageHashMap((ArrayList) images);
            ocrs.addTrainingImages(trainingImages);
            salida = ocrs.scan(ecuacion, 0, 0, 0, 0, null);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println(salida);
        return salida;
    }
}

